/*
* Copyright 2011-2012 Blazebit
*/
package com.blazebit.blazefaces.component.inputfile;
import java.io.IOException;
import javax.faces.FacesException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
import com.blazebit.blazefaces.apt.JsfRenderer;
import com.blazebit.blazefaces.renderkit.OutputRenderer;
import com.blazebit.blazefaces.util.HTML5;
import com.blazebit.blazefaces.util.RendererUtils;
@JsfRenderer
public class InputFileRenderer extends OutputRenderer {
@Override
public void decode(FacesContext context, UIComponent component) {
InputFile inputFile = (InputFile) component;
if(!inputFile.isDisabled()) {
String clientId = inputFile.getClientId(context);
Part part = null;
try {
part = ((HttpServletRequest)context.getExternalContext().getRequest()).getPart(clientId);
} catch (IOException ex) {
throw new FacesException("Could not get the part", ex);
} catch (ServletException ex) {
throw new FacesException("Could not get the part", ex);
}
if(part != null) {
if(part.getName().equals("")) {
inputFile.setSubmittedValue("");
} else {
inputFile.setSubmittedValue(part);
}
}
}
}
@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
String clientId = component.getClientId(context);
InputFile inputFile = (InputFile) component;
encodeMarkup(context, inputFile, clientId);
encodeScript(context, inputFile, clientId);
}
public void encodeMarkup(FacesContext context, InputFile component, String clientId) throws IOException {
ResponseWriter writer = context.getResponseWriter();
writer.startElement("input", component);
RendererUtils.encodeAttribute(writer, "id", clientId, null);
RendererUtils.encodeAttribute(writer, "name", clientId, null);
RendererUtils.encodeAttribute(writer, "type", "file", null);
RendererUtils.encodeAttribute(writer, "class", component.getStyleClass(), null, "styleClass");
RendererUtils.encodeBooleanAttribute(writer, "disabled", component.isDisabled(), false, "disabled");
renderPassThruAttributes(context, component, HTML5.COMMON_ATTRIBUTES);
renderPassThruAttributes(context, component, HTML5.COMMON_TAG_ATTRIBUTES);
renderDataMapAttributes(context, component);
writer.endElement("input");
}
public void encodeScript(FacesContext context, InputFile component, String clientId) throws IOException {
StringBuilder scriptBuilder = new StringBuilder();
scriptBuilder.append("");
RendererUtils.addBodyBottomScript(context, scriptBuilder.toString());
}
}